home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
HyperLib 1997 Winter - Disc 1
/
HYPERLIB-1997-Winter-CD1.ISO.7z
/
HYPERLIB-1997-Winter-CD1.ISO
/
オンラインウェア
/
UTIL
/
Alpha 6.5.sit
/
Tcl
/
Modes
/
latexComm.tcl
< prev
next >
Wrap
Text File
|
1996-08-15
|
18KB
|
588 lines
#############################################################################
#############################################################################
#
# latexComm.tcl (called from latex.tcl)
#
#############################################################################
#
# Author: Tom Scavo <trscavo@syr.edu>
#
#############################################################################
#############################################################################
#--------------------------------------------------------------------------
# TeX applications
#--------------------------------------------------------------------------
# Application *names* aren't needed any more!
# OzTeX:
# set texAppName(OzTeX) {*OzTeX*}
set texAppSig(OzTeX) {OTEX}
set texAppScripts(OzTeX) ¥
{{sendOpenEvent noReply $quotedSig $filename}}
# Textures:
# set texAppName(Textures) {*Textures*}
set texAppSig(Textures) {*TEX}
set texAppScripts(Textures) {{dosc -c $quotedSig -f $filename -r}}
# CMacTeX:
# set texAppName(CMacTeX) {*tex}
set texAppSig(CMacTeX) {*XeT}
set texAppScripts(CMacTeX) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'odoc' -r -f $filename}}
# DirectTeX:
# set texAppName(DirectTeX) {MPW*}
set texAppSig(DirectTeX) {MPS*}
set texAppScripts(DirectTeX) {¥
{set script "Begin; ChangeTeXProject '$filename' -check -confirm || Exit 0; ¥
Execute ¥"{dt_TeXProject}¥"; TeXMenu -tex -formats; ¥
End キ Dev:Null; RunSession 1 キ Dev:Null"} ¥
{dosc -r -c $quotedSig -s $script} ¥
}
# DirectTeX Pro:
# set texAppName(DirectTeXPro) {DirectTeX*}
set texAppSig(DirectTeXPro) {TeX+}
set texAppScripts(DirectTeXPro) {¥
{dosc -c $quotedSig -s ¥
"if ¥$dt_TeXFormat = ¥'¥' ¥"set dt_TeXFormat -x ¥$dt_DefaultFormat¥""} ¥
{dosc -c $quotedSig -s ¥
"ProjectMgr -t ¥$dt_TeXFormat ¥"$filename¥"; MenuCommand 1 4"} ¥
}
#--------------------------------------------------------------------------
# DVI viewers
#--------------------------------------------------------------------------
# OzTeX:
# set viewDVIAppName(OzTeX) $texAppName(OzTeX)
set viewDVIAppSig(OzTeX) $texAppSig(OzTeX)
set viewDVIAppScripts(OzTeX) ¥
{{sendOpenEvent noReply $quotedSig $filename}}
# CMacTeX:
# set viewDVIAppName(CMacTeX) dvipreview
set viewDVIAppSig(CMacTeX) {PIVD}
set viewDVIAppScripts(CMacTeX) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'odoc' -r -f $filename}}
# DirectTeX Pro:
# set viewDVIAppName(DirectTeXPro) $texAppName(DirectTeXPro)
set viewDVIAppSig(DirectTeXPro) $texAppSig(DirectTeXPro)
# set viewDVIAppScripts(DirectTeXPro) ¥
# {{dosc -c $quotedSig -s ¥
# "ProjectMgr -t LaTeX ¥"$filename¥"; SelectApp; MenuCommand 1 8"}}
set viewDVIAppScripts(DirectTeXPro) ¥
{{dosc -c $quotedSig -s "ProjectMgr -t ¥$dt_TeXFormat ¥"[lindex [winNames -f] 0]¥"; MenuCommand 1 8"}}
#--------------------------------------------------------------------------
# DVI print drivers
#--------------------------------------------------------------------------
# OzTeX:
# set printDVIAppName(OzTeX) $texAppName(OzTeX)
set printDVIAppSig(OzTeX) $texAppSig(OzTeX)
set printDVIAppScripts(OzTeX) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'pdoc' -r -f $filename}}
# Textures:
# set printDVIAppName(Textures) $texAppName(Textures)
set printDVIAppSig(Textures) $texAppSig(Textures)
set printDVIAppScripts(Textures) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'pdoc' -r -f $filename}}
# CMacTeX:
# set printDVIAppName(CMacTeX) printdvi
set printDVIAppSig(CMacTeX) {CMT8}
set printDVIAppScripts(CMacTeX) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'pdoc' -r -f $filename}}
# DirectTeX Pro:
# set printDVIAppName(DirectTeXPro) $texAppName(DirectTeXPro)
set printDVIAppSig(DirectTeXPro) $texAppSig(DirectTeXPro)
set printDVIAppScripts(DirectTeXPro) ¥
{{dosc -c $quotedSig -s ¥
"ProjectMgr -t ¥$dt_TeXFormat ¥"[lindex [winNames -f] 0]¥"; MenuCommand 1 9"}}
#--------------------------------------------------------------------------
# DVI-to-PS filters
#--------------------------------------------------------------------------
# OzTeX:
# set dvipsAppName(OzTeX) OzDVIPS
set dvipsAppSig(OzTeX) {OzDP}
set dvipsAppScripts(OzTeX) ¥
{{sendOpenEvent noReply $quotedSig $filename}}
# CMacTeX:
# set dvipsAppName(CMacTeX) dvips
set dvipsAppSig(CMacTeX) {CMT1}
set dvipsAppScripts(CMacTeX) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'odoc' -t 600 -f $filename}}
# DirectTeX Pro:
# set dvipsAppName(DirectTeXPro) $texAppName(DirectTeXPro)
set dvipsAppSig(DirectTeXPro) $texAppSig(DirectTeXPro)
set dvipsAppScripts(DirectTeXPro) ¥
{{dosc -c $quotedSig -s "ProjectMgr -t ¥$dt_TeXFormat ¥"[lindex [winNames -f] 0]¥"; directory ¥$dt_TeXProjectDir > CurrDirectory; dvips ¥$dt_TeXProjectName"}}
#--------------------------------------------------------------------------
# PS viewers
#--------------------------------------------------------------------------
# Mac GhostScript Viewer:
# set viewPSAppName(MacGS) {Mac GS*}
set viewPSAppSig(MacGS) {gsVR}
set viewPSAppScripts(MacGS) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'odoc' -r -f $filename}}
# CMacTeX:
# set viewPSAppName(CMacTeX) viewps
set viewPSAppSig(CMacTeX) {CMT5}
set viewPSAppScripts(CMacTeX) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'odoc' -r -f $filename}}
#--------------------------------------------------------------------------
# PS print drivers
#--------------------------------------------------------------------------
# CMacTeX:
# set printPSAppName(CMacTeX) printps
set printPSAppSig(CMacTeX) {PSP*}
set printPSAppScripts(CMacTeX) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'odoc' -r -f $filename}}
# DirectTeX Pro:
# set printPSAppName(DirectTeXPro) $texAppName(DirectTeXPro)
set printPSAppSig(DirectTeXPro) $texAppSig(DirectTeXPro)
# set printPSAppScripts(DirectTeXPro) ¥
# {{dosc -c $quotedSig -s "SelectApp; dvips ¥$dt_TeXProjectName; ¥
# download ¥$dt_TeXProjectName.ps"}}
set printPSAppScripts(DirectTeXPro) ¥
{{dosc -c $quotedSig -s "ProjectMgr -t ¥$dt_TeXFormat ¥"[lindex [winNames -f] 0]¥"; directory ¥$dt_TeXProjectDir > CurrDirectory; download ¥$dt_TeXProjectName.ps"}}
# Drop・PS
# set printPSAppName(DropPS) {Drop・PS}
set printPSAppSig(DropPS) {D・PS}
set printPSAppScripts(DropPS) ¥
{{dosc -c $quotedSig -k 'aevt' -e 'odoc' -r -f $filename}}
#--------------------------------------------------------------------------
# BibTeX apps
#--------------------------------------------------------------------------
# CMacTeX:
# set bibtexAppName(CMacTeX) {*bibtex}
set bibtexAppSig(CMacTeX) {CMTu}
set bibtexAppScripts(CMacTeX) ¥
{{sendOpenEvent noReply $quotedSig $filename}}
# DirectTeX Pro:
# set bibtexAppSig(DirectTeXPro) $texAppSig(DirectTeXPro)
set bibtexAppScripts(DirectTeXPro) ¥
{{dosc -c $quotedSig -s "ProjectMgr -t ¥$dt_TeXFormat ¥"[lindex [winNames -f] 0]¥"; MenuCommand 1 5"}}
# Vince Darley's BibTeX:
# set bibtexAppName(BibTeX) {BibTeX*}
set bibtexAppSig(BibTeX) {Vbib}
set bibtexAppScripts(BibTeX) ¥
{{sendOpenEvent noReply $quotedSig $filename}}
#--------------------------------------------------------------------------
# MakeIndex apps
#--------------------------------------------------------------------------
# CMacTeX:
# set makeindexAppName(CMacTeX) {[Mm]ake[Ii]ndex}
set makeindexAppSig(CMacTeX) {CMTt}
set makeindexAppScripts(CMacTeX) ¥
{{sendOpenEvent noReply $quotedSig $filename}}
# DirectTeX Pro:
# set makeindexAppName(DirectTeXPro) $texAppName(DirectTeXPro)
set makeindexAppSig(DirectTeXPro) $texAppSig(DirectTeXPro)
# set makeindexAppScripts(DirectTeXPro) ¥
# {{dosc -c $quotedSig -s ¥
# "ProjectMgr -t LaTeX ¥"$filename¥"; SelectApp; MenuCommand 1 6"}}
set makeindexAppScripts(DirectTeXPro) ¥
{{dosc -c $quotedSig -s "ProjectMgr -t ¥$dt_TeXFormat ¥"[lindex [winNames -f] 0]¥"; MenuCommand 1 6"}}
# Rick Zaccone's MakeIndex:
# set makeindexAppName(MakeIndex) {MakeIndex*}
set makeindexAppSig(MakeIndex) {RZMI}
set makeindexAppScripts(MakeIndex) ¥
{{sendOpenEvent noReply $quotedSig $filename}}
#--------------------------------------------------------------------------
# Typeset submenu
#--------------------------------------------------------------------------
proc typeset {} {
# Is there a window open?
set currentWin [lindex [winNames -f] 0]
if { $currentWin == "" } {
typesetFile ""
return
}
# Is the current window part of TeX fileset?
set fset [isWindowInFileset $currentWin "tex"]
if { $fset != "" } {
if [dirtyFileset $fset] {
switch [askyesno -c "Save current TeX fileset?"] {
"yes" {saveEntireFileset $fset}
"no" {
# do nothing
}
"cancel" {return}
}
}
typesetFile [texFilesetBaseName $fset]
return
}
# Is the window untitled or dirty?
global PREFS
set currentDoc [file tail $currentWin]
if { [set num [winUntitled]] } {
switch [askyesno -c "Save ¥"$currentDoc¥"?"] {
"yes" {
if {[catch {set currentWin [saveAs "Untitled$num¥.tex"]}]} then {return}
}
"no" {
set tmpFilename "Untitled$num¥.tex"
set text [getText 0 [maxPos]]
if { [file exists "$PREFS:tmp"] == 0 } { mkdir "$PREFS:tmp" }
set newDoc "$PREFS:tmp:$tmpFilename"
writeFile $newDoc $text 1
set currentWin $newDoc
}
"cancel" {return}
}
} elseif { [winDirty] } {
switch [askyesno -c "Save ¥"$currentDoc¥"?"] {
"yes" {save}
"no" {
set text [getText 0 [maxPos]]
if { [file exists "$PREFS:tmp"] == 0 } { mkdir "$PREFS:tmp" }
set newDoc "$PREFS:tmp:temp-$currentDoc"
writeFile $newDoc $text 1
set currentWin $newDoc
}
"cancel" {return}
}
}
# Is the current window TeX-able?
set ext [file extension $currentWin]
if { [lsearch -exact {.tex .ltx .dtx .ins} $ext] < 0 } {
typesetFile ""
return
}
# Strip off trailing garbage (if any) and typeset:
regexp {(.*) <[0-9]+>} $currentWin dummy currentWin
typesetFile $currentWin
}
proc typesetSelection {} {
global PREFS
if { [isSelection] } then {
watchCursor
message "processing selectionノ"
set currentWin [lindex [winNames -f] 0]
# Is the current window part of TeX fileset?
set fset [isWindowInFileset $currentWin "tex"]
if { $fset == "" } {
set pos1 [getPos]
if { [isInDocument] } then {
set pos2 [selEnd]
if { [isInDocument] } then {
# fall through
} else {
beep
set msg "Selection not in document environment. Continue?"
if { [askyesno $msg] == "no" } then { return }
}
} else {
beep
set msg "Selection not in document environment. Continue?"
if { [askyesno $msg] == "no" } then { return }
set pos2 [selEnd]
}
set body "¥r[getText $pos1 $pos2]¥r"
set searchText [getText 0 [maxPos]]
} else {
set body "¥r[getSelect]¥r"
# Will not handle a base file that is open and dirty:
set searchText [buildFilecontents [texFilesetBaseName $fset]]
}
message "building temporary documentノ"
set pattern {(¥¥documentclass.*)¥¥begin¥{document¥}}
if { ![regexp $pattern $searchText dummy preamble] } then {
set preamble "¥¥documentclass¥{article¥}¥r"
}
set rootFile [file rootname $currentWin]
set tempFile "temp-[file tail $rootFile]"
set auxFile $rootFile.aux
if { [file exists $auxFile] } {
set latexDoc [buildFilecontents $auxFile $tempFile.aux]
} else {
set latexDoc {}
}
append latexDoc $preamble [buildEnvironment "document" "" $body "¥r"]
set currentDir [file dirname $currentWin]
set latexDoc [texResolveAll $latexDoc $currentDir]
if { [file exists "$PREFS:tmp"] == 0 } { mkdir "$PREFS:tmp" }
set newFile "$PREFS:tmp:$tempFile.tex"
writeFile $newFile $latexDoc 1
typesetFile $newFile
} else {
beep
message "no selection"
}
}
proc typesetClipboard {} {
global PREFS
set body "¥r[getScrap]¥r"
set pat1 {¥¥begin¥{document¥}.*¥¥end¥{document¥}}
set pat2 {¥¥documentclass}
set preamble "¥¥documentclass¥{article¥}¥r"
# Check to see if there's a document environment:
if {![regexp $pat1 $body]} then {
append text $preamble [buildEnvironment "document" "" $body "¥r"]
} else {
# Check to see if there's a ¥documentclass command:
if {![regexp $pat2 $body]} then {
append text $preamble $body
} else {
set text $body
}
}
if { [file exists "$PREFS:tmp"] == 0 } { mkdir "$PREFS:tmp" }
set newFile "$PREFS:tmp:temp-noname¥.tex"
writeFile $newFile $text 1
set currentWin $newFile
typesetFile $currentWin
}
# Typeset $filename, but perform no error-checking
#
proc typesetFile {filename} {
if { $filename == "" } {
set filename [getfile "Choose a file to typeset:"]
}
global TeXmodeVars
set prompt {TeX app}
set flag $TeXmodeVars(runTeXInBack)
evalTeXScript tex $prompt $filename $flag
}
# Apply $op to a file with extension $ext. (See latexMenu.tcl for
# many examples.) If 'forcecurrent == 1', use the current window
# even if it belongs to a TeX fileset.
#
proc doTypesetCommand {op ext {forcecurrent 0}} {
if { [set filename [findAuxiliaryFile $ext $forcecurrent]] != "" } {
if { $op == "open" } {
edit -r -m -w $filename
} else {
$op${ext}File $filename
}
} else {
beep
alertnote "No $ext file found!"
}
}
proc viewDVIFile {filename} {
set prompt {DVI viewer}
evalTeXScript viewDVI $prompt $filename
}
proc printDVIFile {filename} {
set prompt {DVI print driver}
evalTeXScript printDVI $prompt $filename
}
proc dvipsDVIFile {filename} {
set prompt {DVI-to-PS filter}
evalTeXScript dvips $prompt $filename
}
proc viewPSFile {filename} {
set prompt {PS viewer}
evalTeXScript viewPS $prompt $filename
}
proc printPSFile {filename} {
set prompt {PS print driver}
evalTeXScript printPS $prompt $filename
}
proc bibtexAUXFile {filename} {
set prompt {BibTeX app}
evalTeXScript bibtex $prompt $filename
}
proc makeindexIDXFile {filename} {
set prompt {MakeIndex app}
evalTeXScript makeindex $prompt $filename
}
proc evalTeXScript {op prompt filename {runAppInBackground 0}} {
global ${op}Sig ${op}AppSig ${op}AppScripts
set supportedApps [array names ${op}AppSig]
foreach app $supportedApps { lappend sigs [set ${op}AppSig($app)] }
set longPrompt "Please locate a $prompt."
if { [catch {launchBackApplSigs $sigs ${op}Sig $longPrompt} appname] } {
error "bug in 'launchBackApplSigs'"
}
set sig [set ${op}Sig]
set quotedSig "'[string trim $sig {'}]'"
# if { $runAppInBackground == 0 } { switchTo [file tail $appname] }
if { $runAppInBackground == 0 } { switchTo $quotedSig }
foreach app $supportedApps {
if { [set ${op}AppSig($app)] == $sig } {
foreach script [set ${op}AppScripts($app)] {
eval $script
}
return
}
}
beep
alertnote "Sorry, no support for your $prompt."
return
}
# Two bugs in 'getfile' (see "alpha.bugs58"):
proc openAnyTeXFile {} {
set currentWin [lindex [winNames -f] 0]
cd [file dirname $currentWin]
set filename [getfile ""]
if { ![string length $filename] } return
edit -r -m -w $filename
}
proc removeAuxiliaryFiles {} {
set word ""
set removeSilently 0
set currentWin [lindex [winNames -f] 0]
if { $currentWin == "" } { return }
set currentDir [file dirname $currentWin]
set extensions {.ps .dvi .log .aux .bbl .idx .ind .glo .gls ¥
.toc .lof .lot .blg .ilg}
foreach ext $extensions {
message "Checking for *$ext filesノ"
set files [glob -nocomplain "$currentDir:*$ext"]
foreach file $files {
set word " more"
if {$removeSilently} {
if {[catch {rm "$currentDir:*$ext"}]} then {
alertnote "not all ¥"*$ext¥" files deleted"
}
break
} else {
message ""
set filename [file tail $file]
switch [buttonAlert "Remove ¥"$filename¥"?" "yes" "no" {rm ext} {rm all} "cancel"] {
"yes" {
message "Removing $filenameノ"
if {[catch {removeFile "$currentDir:$filename"}]} then {
alertnote "¥"$filename¥" not deleted"
} else {
message $filename
}
}
"no" {}
"{rm ext}" {
if {[catch {rm "$currentDir:*$ext"}]} then {
alertnote "not all ¥"*$ext¥" files deleted"
}
break
}
"{rm all}" {
if {[catch {rm "$currentDir:*$ext"}]} then {
alertnote "not all ¥"*$ext¥" files deleted"
}
set removeSilently 1
break
}
"cancel" {return}
}
}
}
}
message "No$word files found"
}
#--------------------------------------------------------------------------
# Utility procs:
#--------------------------------------------------------------------------
# Find a LaTeX auxiliary file with extension $ext. If 'forcecurrent'
# is true, search the current directory without checking for TeX filesets.
#
proc findAuxiliaryFile {ext {forcecurrent 0}} {
set currentWin [lindex [winNames -f] 0]
if { $currentWin == "" } { return "" }
set currentDoc [file tail $currentWin]
if $forcecurrent {
# pretend there are no TeX filesets:
set fset ""
} else {
set fset [isWindowInFileset $currentWin "tex"]
}
if { $fset != "" } {
set currentWin [texFilesetBaseName $fset]
set currentDoc [file tail $currentWin]
set currentDir [file dirname $currentWin]
set docBasename [file rootname $currentDoc]
set lowerExt [string tolower $ext]
} else {
# we do all this if it's not a project:
set currentDir [file dirname $currentWin]
set docBasename [file rootname $currentDoc]
set lowerExt [string tolower $ext]
# Is the window untitled or dirty?
global PREFS
if { [set num [winUntitled]] } {
set filename $PREFS:tmp:Untitled$num¥.$lowerExt
if { [file exists $filename] } {
return $filename
} else {
return ""
}
} elseif { [winDirty] } {
switch [askyesno "Window dirty---continue anyway?"] {
"yes" {
set filename $PREFS:tmp:temp-$currentDoc¥.$lowerExt
if { [file exists $filename] } {
return $filename
} else {
# fall through
}
}
"no" {return ""}
}
}
}
# Check the current directory:
set filename $currentDir:$docBasename¥.$lowerExt
if { [file exists $filename] } {
return $filename
} else {
return ""
}
}
# If the current window is untitled, return its number (i.e., either
# the number 1 or the number n in "Untitled <n>"); otherwise, return 0.
proc winUntitled {} {
set currentWin [lindex [winNames -f] 0]
if { $currentWin == "" } { return 0 }
set currentDoc [file tail $currentWin]
if { [string match $currentWin $currentDoc] } {
if { [regexp {<(.*)>} $currentDoc dummy num] } {
return $num
} else {
return 1
}
} else {
return 0
}
}